package com.swing.event;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * 键盘事件监听器实现类
 * 实现了KeyListener接口，用于处理键盘的各种事件（按下、释放、输入）
 */
public class KeyInput implements KeyListener {

    /**
     * 按键状态数组，用于记录每个按键的按下状态
     * 数组大小为512，足以覆盖所有可能的键盘按键编码
     * 索引对应KeyEvent中的按键代码（如KeyEvent.VK_UP），值为true表示按键被按下
     */
    private static final boolean[] keys = new boolean[512];

    /**
     * 处理按键输入完成事件（本实现中未使用）
     * 由于游戏中更关注按键的持续按下状态，而非字符输入，因此留空
     * @param e 键盘事件对象
     */
    @Override
    public void keyTyped(KeyEvent e) {
        // ignore
    }

    /**
     * 处理按键按下事件
     * 当任何按键被按下时立即触发，更新对应按键的状态为按下（true）
     * @param e 键盘事件对象，包含被按下的键的代码等信息
     */
    @Override
    public void keyPressed(KeyEvent e) {
        // 将对应按键代码的数组元素设为true，表示按键已按下
        keys[e.getKeyCode()] = true;
    }

    /**
     * 处理按键释放事件
     * 当任何按键被释放时触发，更新对应按键的状态为未按下（false）
     * @param e 键盘事件对象，包含被释放的键的代码等信息
     */
    @Override
    public void keyReleased(KeyEvent e) {
        // 将对应按键代码的数组元素设为false，表示按键已释放
        keys[e.getKeyCode()] = false;
    }

    /**
     * 检查指定按键是否处于按下状态
     * 供外部类（如游戏逻辑类）在更新循环中调用，判断按键是否被持续按下
     * @param key 按键代码（如KeyEvent.VK_W）
     * @return 若按键处于按下状态则返回true，否则返回false
     */
    public static boolean isPressed(int key) {
        return keys[key];
    }
}